#ifndef _DEBUG_H_
#define _DEBUG_H_

/*********************************************************************
  * Debug.h
  * 
  * Descripcion:
  * Esta clase muestra por la salida standard los mensajes que se le
  * pasan. Esto lo hace si esta activado el muestreo.
  * Solo se permite una unica instancia de la misma.
  * Como la aplicacion no es multithreading no hace falta implementar
  * una cola de mensajes para esperar la salida
**********************************************************************/ 

#include <iostream>

class Debug{
	
	private:
		
		bool activado; //para saber si debe mostrar o no
		static Debug * instance; //instancia para el singleton
		bool tab;
		
		Debug();
		
		Debug(Debug &d){}
		
	public:
		/*
		 * Metodo de clase para obtener la unica instancia posible.
		 */ 
		static Debug * get_instance();
		
		/*
		 * Destructor de la clase
		 */ 
		~Debug();
		
		/*
		 * Activa o desactiva el debug
		 */
		 void set_activado(bool b); 
		
		/*
		 * Muestra el mensaje por pantalla. 
		 * Le agrega el caracter de fin de linea al mensaje. 
		 */ 
		void mostrar_mensaje(std::string mensaje);
		
		/*
		 * Muestra el mensaje por pantalla. 
		 * Le agrega el caracter de fin de linea al mensaje. 
		 */ 
		void mostrar_mensaje(const char * mensaje);
		
		/*
		 * Metodo para liberar los recursos utilizados por el singleton.
		 * DEBE ser llamado siempre, cuando no se desee utilizar mas 
		 * la clase
		 */ 
		static void destroy();
	
		/*
		 * Devuelve true si esta activado, false en caso contrario
		 */
		bool esta_activado();
		
		/*
		 * Activa o desactiva un nivel de tab
		 */
		void set_tab(bool activado);
};

#endif
